package com.example.designpatterns.command.receiver;

/**
 * Stereo类 - 音响系统，命令的接收者
 */
public class Stereo {
    private String location;
    private boolean isOn;
    private String mode; // CD, Radio, Bluetooth, AUX
    private int volume; // 音量范围：0-100
    
    /**
     * 创建一个音响对象
     * @param location 音响位置
     */
    public Stereo(String location) {
        this.location = location;
        this.isOn = false;
        this.mode = "CD";
        this.volume = 0;
        System.out.println(location + "的音响已初始化");
    }
    
    /**
     * 打开音响
     */
    public void turnOn() {
        if (!isOn) {
            isOn = true;
            volume = 10; // 默认音量为10
            System.out.println(location + "的音响已打开，音量为" + volume);
        } else {
            System.out.println(location + "的音响已经是打开状态");
        }
    }
    
    /**
     * 关闭音响
     */
    public void turnOff() {
        if (isOn) {
            isOn = false;
            volume = 0;
            System.out.println(location + "的音响已关闭");
        } else {
            System.out.println(location + "的音响已经是关闭状态");
        }
    }
    
    /**
     * 设置音响音量
     * @param level 音量级别（0-100）
     */
    public void setVolume(int level) {
        if (!isOn) {
            System.out.println("音响处于关闭状态，无法调整音量");
            return;
        }
        
        if (level < 0) {
            level = 0;
        } else if (level > 100) {
            level = 100;
        }
        
        int oldVolume = volume;
        volume = level;
        System.out.println(location + "的音响音量从" + oldVolume + "调整到" + volume);
    }
    
    /**
     * 设置音响模式
     * @param newMode 新模式（CD, Radio, Bluetooth, AUX）
     */
    public void setMode(String newMode) {
        if (!isOn) {
            System.out.println("音响处于关闭状态，无法切换模式");
            return;
        }
        
        // 验证模式是否有效
        if (!isValidMode(newMode)) {
            System.out.println("无效的模式：" + newMode);
            return;
        }
        
        String oldMode = mode;
        mode = newMode;
        System.out.println(location + "的音响模式从" + oldMode + "切换到" + mode);
    }
    
    /**
     * 检查模式是否有效
     * @param mode 要检查的模式
     * @return 是否有效
     */
    private boolean isValidMode(String mode) {
        return mode.equals("CD") || 
               mode.equals("Radio") || 
               mode.equals("Bluetooth") || 
               mode.equals("AUX");
    }
    
    /**
     * 判断音响是否开启
     * @return 音响是否开启
     */
    public boolean isOn() {
        return isOn;
    }
    
    /**
     * 获取音响音量
     * @return 音响音量
     */
    public int getVolume() {
        return volume;
    }
    
    /**
     * 获取音响模式
     * @return 音响模式
     */
    public String getMode() {
        return mode;
    }
    
    /**
     * 获取音响位置
     * @return 音响位置
     */
    public String getLocation() {
        return location;
    }
    
    /**
     * 获取音响状态信息
     * @return 状态描述
     */
    public String getStatus() {
        return location + "的音响状态：" + (isOn ? "开启" : "关闭") + 
               (isOn ? "，模式为" + mode + "，音量为" + volume : "");
    }
} 